<!DOCTYPE HTML>
<html>
<head>
<title>Loop | AutoHotkey</title>
<meta name="description" content="The Loop statement performs a series of code lines repeatedly: either the specified number of times or until a Break statement is encountered." />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>Loop (普通)</h1>

<p>重复执行一系列命令: 可以指定表示重复次数的数字或直到遇到 <a href="Break.htm">break</a>.</p>

<pre class="Syntax"><span class="func">Loop</span> <span class="optional">, Count</span></pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>Count</dt>
  <dd><p>执行循环体(重复) 的次数. 如果省略, Loop 会无期限继续, 直到遇到 <a href="Break.htm">break</a> 或 <a href="Return.htm">return</a>.</p>
      <p>如果 <em>Count</em> 是一个变量引用例如 %ItemCount%, 每当此变量为空或包含小于 1 的数字时, 循环会被完全跳过.</p>
      <p>由于必须支持<a href="LoopFile.htm">文件模式循环</a>, <em>Count</em> 不可以为表达式. 不过, 和所有的非表达式参数一样, 通过在表达式之前加上 % 和空格可以强制使用它. 例如: <code>Loop % Count + 1</code>. 此时, 表达式仅在循环开始之前被求值一次.</p></dd>

</dl>

<h2 id="Remarks">备注</h2>
<p>循环命令后通常跟着<a href="Block.htm">区块</a>, 这是组成循环<em>体</em>的语句的集合. 不过, 在单语句的循环中可以不使用区块(用于此目的时 "if" 与其相匹配的 "else" 一起被视为单语句).</p>
<p>此命令的常见用途是无限循环, 在循环<em>体</em>中某个地方使用 <a href="Break.htm">break</a> 命令来决定何时停止循环.</p>
<p>在循环中鼓励使用 <a href="Break.htm">break</a> 和 <a href="Continue.htm">continue</a> 代替 <a href="Goto.htm">goto</a>, 因为它们通常可以让脚本更容易理解和维护. 也可以创建 "While" 或者 "Do...While/Until" 循环时, 在循环<em>体</em>的最开始或最后一个语句中使用 IF 语句, 在其中根据条件执行 <a href="Break.htm">break</a> 命令. 但使用 <a href="While.htm">While</a> 或者 <a href="Until.htm">Loop...Until</a> 通常是首选的.</p>
<p>内置变量 <strong>A_Index</strong> 包含当前循环重复的次数. 首次执行循环<em>体</em>时其值为 1. 第二次时其值为 2; 依此类推. 如果一个内层循环包含在一个外层循环中, 那么内层循环具有优先权. A_Index 在所有类型的循环中都有效, 包括<a href="LoopFile.htm">文件循环</a>和<a href="LoopReg.htm">注册表循环</a>; 但是在循环外部时 A_Index 值为 0.</p>
<p>在普通循环中可以使用 <a href="Block.htm#otb">One True Brace(OTB) 风格</a>(但不适用于专用循环例如, <a href="LoopFile.htm">文件模式</a>和<a href="LoopParse.htm">解析</a>). 例如:</p>
<pre>Loop {
    ...
}
Loop %RepeatCount% {
    ...
}</pre>
<p>专用循环: 循环可以用来自动获取文件, 文件夹或注册表项(每次一个). 请参阅<a href="LoopFile.htm">文件循环</a>和<a href="LoopReg.htm">注册表循环</a>了解详细信息. 此外, <a href="LoopReadFile.htm">文件读取循环</a>可以对整个文件的内容进行操作, 每次一行. 最后, <a href="LoopParse.htm">解析循环</a>可以对包含在可分隔的字符串中的单独片段进行操作.</p>
<h2 id="Related">相关</h2>
<p><a href="Until.htm">Until</a>, <a href="While.htm">While 循环</a>, <a href="For.htm">For 循环</a>, <a href="LoopFile.htm">文件和文件夹循环</a>, <a href="LoopReg.htm">注册表循环</a>, <a href="LoopReadFile.htm">文件读取循环</a>, <a href="LoopParse.htm">解析循环</a>, <a href="Break.htm">Break</a>, <a href="Continue.htm">Continue</a>, <a href="Block.htm">区块</a></p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 创建一个有 3 次迭代的循环.</p>
<pre>Loop, 3
{
    MsgBox, Iteration number is %A_Index%.  <em>; A_Index 将为 1, 2, 接着 3</em>
    Sleep, 100
}</pre>
</div>

<div class="ex" id="ExBreakContinue">
<p><a class="ex_number" href="#ExBreakContinue"></a> 创建一个无限循环, 但在第 25 次迭代后会被终止.</p>
<pre>Loop
{
    if (A_Index &gt; 25)
        break  <em>; 终止循环</em>
    if (A_Index &lt; 20)
        continue <em>; 跳过后面并开始下一次重复</em>
    MsgBox, A_Index = %A_Index% <em>; 这里将仅显示数字 20 到 25</em>
}</pre>
</div>

</body>
</html>